<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>inde14-Reflect和Proxy</title>
</head>
<body>
  <script type="text/javascript">

      // 定义目标对象
      let target = {
        name: "小明",
        age: 20
      };

      // 定义拦截对象
      let handler = {
        // 获取方法的拦截方法
        // target:目标对象
        // propKey:属性名
        get(target, propKey, receive) {
          // console.log(receive);
          // console.log("访问的属性:" + name);
          // return target[name];
          if (propKey in target) {
            console.log("success");
          } else {
            console.log("error");
          }
          return Reflect.get(target, propKey, receive);
        },
        // target:目标对象
        // propKey:属性名
        // value:值
        // receive:代理对象本身
        set(target, propKey, value,receive){
          if (propKey == 'age') {
            if (!Number.isInteger(value)) {
              // 不是整数
              throw new TypeError('年龄不是整数');
            } else {
              console.log('年龄的值是正确值');
            }
          } else {
            console.log('正确值');
          }
          return Reflect.set(target, propKey, value,receive);
        },
        // 判断某个属性是否在目标对象中存在
        has(target, propKey) {
          console.log('has被执行');
          return propKey in  target;
        }
      };

      // 测试has的使用
      let pro = new Proxy(target, handler);
      console.log('name' in pro);
      console.log('sex' in pro);

      // 测试set函数的使用
      // let pro = new Proxy(target, handler);
      // pro.age = 30;
      // pro.name = '呵呵';
      // console.log(pro.age);
      // console.log(pro.name);

      // 创建代理对象
      // let pro = new Proxy(target, handler);
      // console.log(pro.name);
      // console.log(pro.age);
      // console.log(pro.sex);

      // 创建代理对象以及代理对象原型对象
      // let pro = new Proxy(target, handler);
      // let obj = Object.create(pro); // pro作为obj的原型
      // console.log(obj.name);

  </script>
</body>
</html>